package com.easylinkin.linkappapi.safe.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.easylinkin.linkappapi.danger.entity.DangerType;
import com.easylinkin.linkappapi.openapi.dto.BigScreenStatisticDTO;
import com.easylinkin.linkappapi.openapi.dto.ProjectStatisticDTO;
import com.easylinkin.linkappapi.openapi.vo.SafetyCheckHiddenDangerPageVo;
import com.easylinkin.linkappapi.safe.dto.*;
import com.easylinkin.linkappapi.safe.entity.HiddenDanger;
import com.easylinkin.linkappapi.shigongyun.vo.TenantProjectCountVo;
import org.apache.ibatis.annotations.Param;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * HiddenDanger表数据库访问层
 *
 * @author CodeGenerator
 * @date 2022/07/21
 */
public interface HiddenDangerMapper extends BaseMapper<HiddenDanger> {


    /**
     * 查询分页
     *
     * @param page         分页参数对象
     * @param hiddenDanger 过滤参数对象
     * @return 查询分页结果
     */
    IPage<HiddenDanger> selectPage(Page page, @Param("hiddenDanger") HiddenDanger hiddenDanger);

    /**
     * 查询单条
     *
     * @param id 主键id
     * @return 查询结果
     */
    HiddenDanger getOneById(@Param("id") Serializable id);

  IPage<HiddenDangerDTO> selectListByPage(Page page, @Param("hiddenDangerDTO") HiddenDangerDTO hiddenDangerDTO);

  HiddenDangerDTO getOneInfoById();

  HiddenDangerCountDTO getStatistics(@Param("tenantId") String tenantId, @Param("endTime") Date endTime, @Param("content") String content, @Param("linkUnitId") String linkUnitId,

                                     @Param("rectifyUid") Long rectifyUid, @Param("startTime") Date startTime);

  List<HiddenDangerCountDTO> getUnitIdStatistics(@Param("tenantId") String tenantId,@Param("startTime") Date startTime, @Param("endTime") Date endTime);

  List<DangerType> getListByParentId(@Param("parentId") int parentId);

    /**
     * 根据危大工程id查询隐患信息
     *
     * @param dangerousInfoId 危大工程id
     * @return 隐患信息
     */
    List<HiddenDangerDTO> selectHiddenDangerByDangerousRef(Long dangerousInfoId);

  IPage<HiddenDangerPhotoAlbumDTO> selectPhotoAlbumByPage(Page page, @Param("queryDTO") HiddenDangerPhotoAlbumQueryDTO queryDTO);

  List<HiddenDangerPhotoAlbumDTO> selectPhotoAlbumByPage(@Param("queryDTO") HiddenDangerPhotoAlbumQueryDTO queryDTO);


  List<HiddenDangerCountDTO> getTypeCount(@Param("tenantId") String tenantId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

  List<HiddenDangerCountDTO> getPartCount(@Param("tenantId") String tenantId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

  List<HiddenDangerCountDTO> getPersonCount(String tenantId);

  List<HiddenDangerCountDTO> getMonthCount(@Param("tenantId") String tenantId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

  List<HiddenDangerCountDTO> getDayCount(@Param("tenantId") String tenantId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

  int getMyWaitCheckNum(@Param("tenantId") String tenantId, @Param("id") Long id);

  int getMyWaitRectifyNum(@Param("tenantId") String tenantId, @Param("id") Long id);

    /**
     * 根据安全检查、状态分组统计数量
     *
     * @param safetyCheckHiddenDangerPageVo 条件vo
     * @return 统计list
     */
    List<HiddenDangerCountDTO> countGroupByCheckAndStatus(SafetyCheckHiddenDangerPageVo safetyCheckHiddenDangerPageVo);

    /**
     * 企业级隐患统计
     *
     * @param hiddenDangerDTO 隐患条件dto
     * @return 隐患统计数据
     */
    HiddenDangerCountDTO getCountEnterprise(@Param("hiddenDangerDTO") HiddenDangerDTO hiddenDangerDTO);

  /**
     * 隐患数据按项目统计(企业级)
     *
     * @return 统计数据
     */
    IPage<HiddenDangerCountDTO> getTenantIdCountList(Page page, @Param("hiddenDangerDTO") HiddenDangerDTO hiddenDangerDTO);

  /**
   * 企业级大屏 检查台账趋势图
   *
   * @return
   */
  List<SafetyCheckTrendDTO> selectSafetyCheckTrend(@Param("start") Date start, @Param("end") Date end, @Param("hiddenDanger") HiddenDanger hiddenDanger);

  List<BigScreenStatisticDTO> selectSafetyCheckCategoryByName(@Param("start") Date start, @Param("end") Date end);

    SafetyCheckCategory selectSafetyCheckCategory(@Param("start") Date start, @Param("end") Date end);

  List<ProjectStatisticDTO> selectCheckNumAndCloseRate();

  /**
   * 根据级别月份统计数量
   * @param tenantProjectCountVo 条件vo
   * @return 统一出参
   */
  List<Map<String, Object>> countGroupByLevelMonth(TenantProjectCountVo tenantProjectCountVo);

  //查询已超期的安全隐患
  List<HiddenDangerDTO> findOverByTenantIds(@Param("tenantIds") List<String> tenantIds);

  //即将复合即将超期的数据
  List<HiddenDangerDTO> findHueList();
}

